#ifndef MULTICHARTWINDOW_H
#define MULTICHARTWINDOW_H

#include <QMainWindow>
#include <QGridLayout>
#include <QPushButton>
#include <QEvent>
#include <QtGlobal>

// 根据Qt版本选择正确的命名空间处理方式
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
    #include <QtCharts> // Qt 6中2使用通用头文件
#else
    #include <QtCharts/QChart>
    #include <QtCharts/QChartView>
    #include <QtCharts/QLineSeries>
    #include <QtCharts/QValueAxis><br/>
    #ifndef QT_CHARTS
    #endif
    QT_CHARTS_USE_NAMESPACE // Qt 5中使用这个宏启用1命名空间
#endif

class MultiChartWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MultiChartWindow(QWidget *parent = nullptr);
    ~MultiChartWindow();
    
    // 添加数据点到指定通道的图表
    void addDataPoint(int channelIndex, double x, double y);
    
    // 设置所有图表的最大数据点数量
    void setMaxPoints(qint64 maxPoints);
    
    // 设置采样时间
    void setSampleTime(int sampleTime);
    
    // 清除所有图表数据
    void clearAllData();
    
    // 事件过滤器，用于处理数据点拖动
    bool eventFilter(QObject *obj, QEvent *e) override;

    // 更新UI控件显示但不触发信号
    void updateControlsSilently(qint64 newMaxPoints, int newSampleTime);
    
    // 在没有新数据时更新时间轴，添加0值数据点
    void updateTimeAxisWithoutData();

signals:
    // 当采样点数量更改时发出的信号
    void sampleSizeChanged(qint64 newSize);
    // 当采样时间更改时发出的信号
    void sampleTimeChanged(int newTime);
    // 当清除数据时发出的信号，通知主窗口重置数据计数器
    void resetDataCounter();

private:
    QWidget *centralWidget;
    QGridLayout *mainLayout;
    
    // 六个子图表和视图
    QChart *charts[6];
    QChartView *chartViews[6];
    QLineSeries *series[6];
    QDateTimeAxis *axesX[6]; // 改为QDateTimeAxis类型
    QValueAxis *axesY[6];
    
    // 通道标题
    const QStringList channelTitles = {
        "加速度 (m/s²)", "加速度 (m/s²)", "加速度 (m/s²)",
        "声强", "温度 (°C)", "电压 (V)"
    };
    
    qint64 maxPoints; // 从int改为qint64，确保与MainWindow类型匹配
    QPushButton *clearButton;
    
    // 用于数据点拖动的成员变量
    int dragChartIndex;  // 当前拖动的数据点所在的图表索引
    int dragPointIndex;  // 当前拖动的数据点索引
    bool isDragging;     // 是否正在拖动数据点
    
    // 用于时间轴的成员变量
    QDateTime firstDataTime; // 记录第一个数据点的时间戳
    bool firstDataReceived;  // 是否已经收到第一个数据点
    
    // 自动锁定最优视图相关
    QPushButton *autoFitButton; // 一键自动锁定最优视图按钮
    
    // 采样参数调整控件
    QLineEdit *sampleSizeEdit;  // 采样点数量手动输入
    QLineEdit *sampleTimeEdit;  // 采样时间范围手动输入
    QLabel *sampleSizeLabel;    // 显示当前的采样点数量
    QLabel *sampleTimeLabel;    // 显示当前的采样时间
    QLabel *sampleSizeRangeLabel;  // 采样点数量范围提示
    QLabel *sampleTimeRangeLabel;  // 采样时间范围提示
    
    void initCharts();
    void initControls(QVBoxLayout *mainLayout);
    void autoFitAllViews();
};

#endif // MULTICHARTWINDOW_H